<?php

/**
 * RL_Attribute -- атрибут.
 *
 * Пара "Имя-Значение" в одном лице
 *
 * Особенности
 *
 * На него можно ссылаться как на единую сущность
 * Его можно передать куда-то еще как едину сущность
 * Может включаться в контейнер RL_AttributeList
 * 
 * @package RL
 * @author Lucky <lucky@jetstyle.ru> 
 * @version $Id: Attribute.php 62 2007-09-05 08:27:21Z lucky $
 */
class RL_Attribute
{

	/**
	 * name имя атрибута.
	 * 
	 * @var string
	 * @access public
	 */
	public $name = NULL;
	/**
	 * value значение атрибута (опционально)
	 *
	 * Если не определен, то атрибут сам является своим значением 
	 * 
	 * @var mixed
	 * @access public
	 */
	public $value = NULL;

	/**
	 * has_value есть-ли кастомное значение у атрибута
	 *
	 * Если FALSE, то значением атрибута является он сам ($this)
	 * 
	 * @var boolean
	 * @access public
	 */
	public $has_value = FALSE;

	//!a manipulator
	/**
	 * setName Установить имя атрибута
	 * 
	 * @param mixed $name имя атрибута
	 * @access public
	 * @return $this
	 */
	public function setName ($name)
	{
		$this->name = $name;
		return $this;
	} // end of function setName

	//!a manipulator
	/**
	 * setValue Установить значение атрибута
	 * 
	 * @param mixed $value значение атрибута
	 * @access public
	 * @return void
	 */
	public function setValue ($value)
	{
		$this->value = $value;
		$this->has_value = True;
		return $this;
	} // end of function setValue

	//!an accessor
	/**
	 * getName Вернуть имя атрибута
	 * 
	 * @access public
	 * @return string
	 */
	public function getName ()
	{
		return $this->name;
	} // end of function getName

	//!an accessor
	/**
	 * getValue вернуть значение атрибута
	 * 
	 * @access public
	 * @return mixed
	 */
	public function getValue ()
	{
		if ($this->has_value) return $this->value;
		else return $this;
	} // end of function getValue

}
